package com.example.papercut.mapper;

import com.example.papercut.entity.PapercutTemplate;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
public interface PapercutTemplateMapper {

    /**
     * 1.2/4.3: 根据 ID 获取剪纸模板的详细信息（需进行多表联合查询）
     * 实际XML中需要配置 <resultMap> 实现实体类中对象的级联填充
     */
    PapercutTemplate findTemplateDetailsById(Integer id);

    /**
     * 新增剪纸模板（用于 3.4 内部资产管理或用户上传）
     */
    int insertTemplate(PapercutTemplate template);
    
    /**
     * 1.1: 根据多个维度条件查询模板列表。
     * 实际XML中需要使用 <where> 和 <if> 进行动态查询。
     * @param sortBy 排序字段，如 "rating" (评分) 或 "time" (上传时间)
     */
    List<PapercutTemplate> searchTemplates(
        @Param("categoryId") Integer categoryId,
        @Param("themeId") Integer themeId,
        @Param("techniqueId") Integer techniqueId,
        @Param("layoutId") Integer layoutId,
        @Param("authorId") Integer authorId,
        @Param("keyword") String keyword, // 模糊搜索名称或描述
        @Param("sortBy") String sortBy
    );
    
    /**
     * 1.3: 查询平均评分高于指定值的模板列表
     */
    List<PapercutTemplate> findTemplatesByMinRating(@Param("minRating") Double minRating);

    // ... 其他 CRUD 方法
}